<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<!--[if lt IE 9]>
  <script src="https://oss.maxcdn.com/libs/html5shiv/3.7.0/html5shiv.js"></script>
<![endif]-->
<title>VIM 中文帮助: 对某一类型文件的专有设定</title>
<link rel="stylesheet" href="vim-stylesheet.css" type="text/css" />
<link rel="canonical" href="https://yianwillis.github.io/vimcdoc/doc/filetype.html" />
<script type="text/javascript" src="vimcdoc.js"></script>
<meta name="viewport" content="width=device-width, initial-scale=1" />
</head>
<body>
<nav id=banner>
<form action=tags.html target="tag_iframe">
  <input type="text" name="tag" id="tag" placeholder="标签搜索">
</form>
<iframe name="tag_iframe" src=""></iframe>
<a href="help.html">帮助总览</a> &middot;
<hr/>
<a href="quickref.html">快速参考</a> &middot;
<a href="index.html">命令索引</a> &middot;
<a href="eval.html#functions">函数列表</a> &middot;
<a href="quickref.html#option-list">选项列表</a> &middot;
<hr/>
<a href="usr_toc.html">用户手册</a> &middot;
<a href="help.html#reference_toc">参考手册</a> &middot;
</nav>

<header>
<h2>filetype</h2>
</header>
<article id=outer>
<section class=inner>
<b class="vimtag"> <a name="filetype.txt">filetype.txt</a> </b>  适用于 Vim 9.0 版本。   最近更新: 2023年2月


                  <code class="vim">VIM 参考手册    by Bram Moolenaar</code>
                                <code class="vim">译者</code>: Willis、tocer


文件类型                                                <b class="vimtag"> <a name="filetype">filetype</a> </b> <b class="vimtag"> <a name="file-type">file-type</a> </b>

1. 文件类型                                      <a href="filetype.html#filetypes">filetypes</a> 
2. 文件类型插件                                  <a href="filetype.html#filetype-plugins">filetype-plugins</a> 
3. 缺省文件类型插件的文档                        <a href="filetype.html#ftplugin-docs">ftplugin-docs</a> 

另见  <a href="autocmd.html#autocmd.txt">autocmd.txt</a> 。

</section><hr class="doubleline" /><section class=inner>
<h4>1. 文件类型                                     <b class="vimtag"> <a name="filetypes">filetypes</a> </b> <b class="vimtag"> <a name="file-types">file-types</a> </b></h4>
Vim 可以检测要编辑的文件类型。这是通过检查文件名完成的，有的时候也检查文本里是
否包含特定的文本。

                                                        <b class="vimtag"> <a name=":filetype">:filetype</a> </b> <b class="vimtag"> <a name=":filet">:filet</a> </b>
要打开文件类型的检测，在你的 vimrc 里加入以下命令: 
<code class="example">        :filetype on</code>
每次一个新的或者已经存在的文件被编辑时，Vim 会试图识别文件的类型，并设置
<a href="options.html#'filetype'">'filetype'</a> 选项。同时，也触发 FileType 事件。该事件可以设置语法高亮，特定选
项，等等。

<code class="note">注意</code>: 文件类型和 <a href="options.html#'compatible'">'compatible'</a> 不能很好的一起工作。因为 Vi 兼容意味着所有的选项
都是全局的。如果你还那么做，建议复位 <a href="options.html#'compatible'">'compatible'</a> 选项。

详情: ":filetype on" 命令会加载以下文件中的一个:
                Amiga       $VIMRUNTIME/filetype.vim
                Mac         $VIMRUNTIME:filetype.vim
                MS-Windows  $VIMRUNTIME\filetype.vim
                Unix        $VIMRUNTIME/filetype.vim
                VMS         $VIMRUNTIME/filetype.vim
        该文件是一个 Vim 脚本，其中定义了 BufNewFile 和 BufRead 事件的自动命
        令。如果根据文件名不能检测到文件类型，则使用 $VIMRUNTIME/scripts.vim
        来根据文件内容检测之。
        正在或即将启动 GUI 时，同时也会执行  <a href="gui.html#menu.vim">menu.vim</a>  脚本。如果不想要，参见
         <a href="options.html#'go-M'">'go-M'</a> 。

要加入你自己的文件类型，见下面的  <a href="filetype.html#new-filetype">new-filetype</a> 。要查找一种文件类型的帮助，加
上 "ft-" 前缀和可选的 "-syntax"、"-indent" 或者 "-plugin" 后缀。例如: 
<code class="example">        :help ft-vim-indent</code>
<code class="example">        :help ft-vim-syntax</code>
<code class="example">        :help ft-man-plugin</code>
<code class="example"></code>
如果文件类型没有被自动识别，或者找到的是错误的类型，你可以手动设置 <a href="options.html#'filetype'">'filetype'</a>
选项，或者在文件里加入模式行。例如，对于 IDL 文件，可以使用 
<code class="example">        :set filetype=idl</code>
<code class="example"></code>
或者在文件中加入模式行  <a href="options.html#modeline">modeline</a> :
<code class="section">        /* vim: set filetype=idl : */ </code>

                                                <b class="vimtag"> <a name=":filetype-plugin-on">:filetype-plugin-on</a> </b>
你可以为特定的文件类型允许插件文件的载入: 
<code class="example">        :filetype plugin on</code>
如果文件类型检测以前尚未打开，载入该文件后就被打开了。该命令实际上载入了
<a href="options.html#'runtimepath'">'runtimepath'</a> 里的 "ftplugin.vim" 文件。其结果是，在文件编辑时，相应的插件文件
也会载入 (如果文件类型能检测到)。 <a href="usr_43.html#filetype-plugin">filetype-plugin</a> 

                                                <b class="vimtag"> <a name=":filetype-plugin-off">:filetype-plugin-off</a> </b>
你可以如此关闭之: 
<code class="example">        :filetype plugin off</code>
文件类型检测此时没有关闭。但如果你关闭了，相应的插件就不会被自动载入。该命令实
际上载入了 <a href="options.html#'runtimepath'">'runtimepath'</a> 里的 "ftplugof.vim" 文件。

                                                <b class="vimtag"> <a name=":filetype-indent-on">:filetype-indent-on</a> </b>
你可以为特定的文件类型载入缩进文件: 
<code class="example">        :filetype indent on</code>
如果文件类型检测以前尚未打开，载入该文件后就被打开了。该命令实际上载入了
<a href="options.html#'runtimepath'">'runtimepath'</a> 里的 "indent.vim" 文件。其结果是，在文件编辑时，相应的缩进文件
也会载入 (如果文件类型能检测到)。 <a href="indent.html#indent-expression">indent-expression</a> 

                                                <b class="vimtag"> <a name=":filetype-indent-off">:filetype-indent-off</a> </b>
你可以如此关闭之: 
<code class="example">        :filetype indent off</code>
文件类型检测此时没有关闭。但如果你关闭了，相应的缩进文件就不会被自动载入。该命
令实际上载入了 <a href="options.html#'runtimepath'">'runtimepath'</a> 里的 "indoff.vim" 文件。
这会关闭你后面所打开的文件中的自动缩进。在已经打开的文件中，自动缩进还依然有
效。要在已打开的文件中关闭缩进，复位 <a href="options.html#'autoindent'">'autoindent'</a>、<a href="options.html#'cindent'">'cindent'</a>、<a href="options.html#'smartindent'">'smartindent'</a>
和/或 <a href="options.html#'indentexpr'">'indentexpr'</a>。

                                                <b class="vimtag"> <a name=":filetype-off">:filetype-off</a> </b>
要关闭文件类型检测，使用如下命令: 
<code class="example">        :filetype off</code>
"plugin" 和 "indent" 的标志位还会保持，但是因为没有文件类型被检测到，直到下次
":filetype on" 为止，它们不会真的工作。


总览:                                           <b class="vimtag"> <a name=":filetype-overview">:filetype-overview</a> </b>

<code class="section">命令                            检测    plugin  indent </code>
:filetype on                    打开    未改变  未改变
:filetype off                   关闭    未改变  未改变
:filetype plugin on             打开    打开    未改变
:filetype plugin off            未改变  关闭    未改变
:filetype indent on             打开    未改变  打开
:filetype indent off            未改变  未改变  关闭
:filetype plugin indent on      打开    打开    打开
:filetype plugin indent off     未改变  关闭    关闭

要查看当前的状态，只需输入: 
<code class="example">        :filetype</code>
输出结果看起来大概如此: 
<code class="example">        filetype detection:ON  plugin:ON  indent:OFF</code>
<code class="example"></code>
文件类型也用于语法高亮。如果使用 ":syntax on" 命令，文件类型检测也被安装。所
以，没有必要在 ":syntax on" 之后再执行 ":filetype on"。

要关闭某种文件类型，在你的文件类型文件里加入一行。见  <a href="filetype.html#remove-filetype">remove-filetype</a> 。

                                                        <b class="vimtag"> <a name="filetype-detect">filetype-detect</a> </b>
要再次检测文件类型: 
<code class="example">        :filetype detect</code>
使用这个命令可以使你先编辑一个空白文件，任何输入足够的文本，使得文件类型能够被
识别。例如，你以此开始输入一个新的外壳脚本: "#!/bin/csh"。
   如果文件类型检测被关闭，它会先被打开。就像用了 "on" 参数那样。

                                                        <b class="vimtag"> <a name="filetype-overrule">filetype-overrule</a> </b>
如果多个不同的文件类型使用了相同的扩展名，Vim 试图猜测到底该文件属于哪个类型。
这并不总行。一些全局变量可以用来为某些特定的扩展名决定具体的文件类型:

<code class="section">        文件名          变量 </code>
        *.asa           g:filetype_asa   <a href="syntax.html#ft-aspvbs-syntax">ft-aspvbs-syntax</a>   <a href="syntax.html#ft-aspperl-syntax">ft-aspperl-syntax</a> 
        *.asm           g:asmsyntax      <a href="syntax.html#ft-asm-syntax">ft-asm-syntax</a> 
        *.asp           g:filetype_asp   <a href="syntax.html#ft-aspvbs-syntax">ft-aspvbs-syntax</a>   <a href="syntax.html#ft-aspperl-syntax">ft-aspperl-syntax</a> 
        *.bas           g:filetype_bas   <a href="syntax.html#ft-basic-syntax">ft-basic-syntax</a> 
        *.cfg           g:filetype_cfg
        *.cls           g:filetype_cls
        *.csh           g:filetype_csh   <a href="syntax.html#ft-csh-syntax">ft-csh-syntax</a> 
        *.dat           g:filetype_dat
        *.frm           g:filetype_frm   <a href="syntax.html#ft-form-syntax">ft-form-syntax</a> 
        *.fs            g:filetype_fs    <a href="syntax.html#ft-forth-syntax">ft-forth-syntax</a> 
        *.i             g:filetype_i     <a href="syntax.html#ft-progress-syntax">ft-progress-syntax</a> 
        *.inc           g:filetype_inc
        *.lsl           g:filetype_lsl
        *.m             g:filetype_m     <a href="syntax.html#ft-mathematica-syntax">ft-mathematica-syntax</a> 
        *.mod           g:filetype_mod
        *.p             g:filetype_p     <a href="syntax.html#ft-pascal-syntax">ft-pascal-syntax</a> 
        *.pl            g:filetype_pl
        *.pp            g:filetype_pp    <a href="syntax.html#ft-pascal-syntax">ft-pascal-syntax</a> 
        *.prg           g:filetype_prg
        *.r             g:filetype_r
        *.sig           g:filetype_sig
        *.sql           g:filetype_sql   <a href="syntax.html#ft-sql-syntax">ft-sql-syntax</a> 
        *.src           g:filetype_src
        *.sys           g:filetype_sys
        *.sh            g:bash_is_sh     <a href="syntax.html#ft-sh-syntax">ft-sh-syntax</a> 
        *.tex           g:tex_flavor     <a href="filetype.html#ft-tex-plugin">ft-tex-plugin</a> 
        *.w             g:filetype_w     <a href="syntax.html#ft-cweb-syntax">ft-cweb-syntax</a> 

对一些文件类型而言，全局变量只用于文件类型无法检测的场合:
        *.r             g:filetype_r     <a href="syntax.html#ft-rexx-syntax">ft-rexx-syntax</a> 

                                                        <b class="vimtag"> <a name="filetype-ignore">filetype-ignore</a> </b>
要避免检测某些文件，用 g:ft_ignore_pat 变量。缺省值是: 
<code class="example">        :let g:ft_ignore_pat = '\.\(Z\|gz\|bz2\|zip\|tgz\)$'</code>
这意味着压缩文件的内容不会被检测。

                                                        <b class="vimtag"> <a name="new-filetype">new-filetype</a> </b>
如果你想使用的文件没检测到文件类型，有四种方法。不管如何，最好不要修改
$VIMRUNTIME/filetype.vim 文件。再安装新的 Vim 版本的时候它会被覆盖。

A. 如果你想否决所有的缺省文件类型检查。
   这里，每种文件类型需要写一个文件。缺点就是，你需要很多文件。优点就是，你只
   需要把文件放到合适的目录就可以了。
                                                        <b class="vimtag"> <a name="ftdetect">ftdetect</a> </b>
   1. 建立你自己的运行时目录。通常，你会用 <a href="options.html#'runtimepath'">'runtimepath'</a> 选项的第一项。然后，
      在其中建立 "ftdetect" 目录。Unix 上的例子: 
<code class="example">        :!mkdir ~/.vim</code>
<code class="example">        :!mkdir ~/.vim/ftdetect</code>

   2. 建立包含检测文件类型的自动命令的文件。例如: 
<code class="example">        au BufRead,BufNewFile *.mine            set filetype=mine</code>
      <code class="note">注意</code> 这里没有 "augroup" 命令。在执行你的文件的时候这点已经做好了。你可以
      使用 "*" 模式，然后分析文件内容来检测其类型。
      把该文件叫做 "mine.vim"，并把它放在用户运行时目录的 "ftdetect" 目录里。
      例如，在 Unix 上: 
<code class="example">        :w ~/.vim/ftdetect/mine.vim</code>
<code class="example"></code>
   3. 要使用新的文件类型检测，你需要重新启动 Vim。

   "ftdetect" 目录的文件在所有的缺省检查之后进行，这样它们就能否决之前进行的文
   件类型检测。但是你还可以用  <a href="options.html#:setfiletype">:setfiletype</a>  保持前一个检测到的文件类型。

B. 如果你想在缺省文件类型检查之后检测自己的文件。

   和上述的 A 类似。但不是无条件的设置 <a href="options.html#'filetype'">'filetype'</a>，而是使用 ":setfiletype"。该
   命令只有在没有文件类型被监测到的前提下才会设置 <a href="options.html#'filetype'">'filetype'</a>。例如: 
<code class="example">        au BufRead,BufNewFile *.txt             setfiletype text</code>

   在你的命令里，你可以使用已经检测到的文件类型。例如，在 "pascal" 类型已经被
   检测到的前提下，要使用文件类型 "mypascal": 
<code class="example">        au BufRead,BufNewFile *         if &amp;ft == 'pascal' | set ft=mypascal</code>
<code class="example">                                                                       | endif</code>
<code class="example"></code>
C. 如果你的文件类型可以通过文件名检测。
   1. 建立你自己的运行时目录。通常，你会用 <a href="options.html#'runtimepath'">'runtimepath'</a> 选项的第一项。Unix 上
      的例子: 
<code class="example">        :!mkdir ~/.vim</code>

   2. 创建包含自动命令的文件用于检测文件类型。示例: 
<code class="example">        " my filetype file</code>
<code class="example">        if exists("did_load_filetypes")</code>
<code class="example">          finish</code>
<code class="example">        endif</code>
<code class="example">        augroup filetypedetect</code>
<code class="example">          au! BufRead,BufNewFile *.mine         setfiletype mine</code>
<code class="example">          au! BufRead,BufNewFile *.xyz          setfiletype drawing</code>
<code class="example">        augroup END</code>
      在用户运行时目录下，把该文件存为 "filetype.vim"。例如，在 Unix 上: 
<code class="example">        :w ~/.vim/filetype.vim</code>
<code class="example"></code>
   3. 要使用新的文件类型检测，你需要重新启动 Vim。

   这里，你的 filetype.vim 会在缺省的 FileType 自动命令安装前被执行。所以，你
   的自动命令会先被匹配，而 ":setfiletype" 命令的时候保证了其后没有其他的自动
   命令会改变 <a href="options.html#'filetype'">'filetype'</a>。
                                                        <b class="vimtag"> <a name="new-filetype-scripts">new-filetype-scripts</a> </b>
D. 如果你的文件类型只能通过分析文件内容来检测。

   1. 建立你的用户运行时目录。通常，你会用 <a href="options.html#'runtimepath'">'runtimepath'</a> 选项的第一项。Unix 上
      的例子: 
<code class="example">        :!mkdir ~/.vim</code>

   2. 创立一个 vim 脚本，来实现需要的功能。示例: 
<code class="example">        if did_filetype()       " filetype 已经设立..</code>
<code class="example">          finish                " ..不需要这些检测</code>
<code class="example">        endif</code>
<code class="example">        if getline(1) =~ '^#!.*\&lt;mine\&gt;'</code>
<code class="example">          setfiletype mine</code>
<code class="example">        elseif getline(1) =~? '\&lt;drawing\&gt;'</code>
<code class="example">          setfiletype drawing</code>
<code class="example">        endif</code>
      更多的例子可以参见 $VIMRUNTIME/scripts.vim。
      把该文件命名为 "scripts.vim"，并保存在你的用户运行时目录。例如，在 Unix
      上: 
<code class="example">        :w ~/.vim/scripts.vim</code>

   3. 检测会立即生效，无须重新启动 Vim。

   你的 scripts.vim 在文件类型的缺省之前被载入，这意味着你的规则会覆盖
   $VIMRUNTIME/scripts.vim 的缺省规则。

                                                <b class="vimtag"> <a name="remove-filetype">remove-filetype</a> </b>
如果某个文件类型检测有问题，安装一个 filetype.vim 或者 scripts.vim 去捕获这个
问题 (见上)。你可以把 <a href="options.html#'filetype'">'filetype'</a> 设成一个不存在的名字，使得以后不会被设置: 
<code class="example">        :set filetype=ignored</code>
<code class="example"></code>
如果你为许多用户设置系统，而不想为每个用户分别增加/删除相同的为件类型，考虑把
filetype.vim 和 scripts.vim 写到一个大家都能用的运行时目录里。查看
<a href="options.html#'runtimepath'">'runtimepath'</a> 里有没有能用的目录。如果没有，在  <a href="starting.html#system-vimrc">system-vimrc</a>  里设置
<a href="options.html#'runtimepath'">'runtimepath'</a>。切记要保存缺省的目录。


                                                <b class="vimtag"> <a name="autocmd-osfiletypes">autocmd-osfiletypes</a> </b>
<code class="note">备注</code>: 现在此段代码已不再用，因为我们已移除了 RISC OS 实现。将来就用 <a href="options.html#'filetype'">'filetype'</a>
选项便可。

如果操作系统支持在文件里存储文件类型，你可以指定某一文件类型专用的自动命令。

实际的类型检查决定于你运行 Vim 所处的平台；详情参见你的系统文档。

要在自动命令里使用 osfiletype 检查，你应该把待匹配类型的模式串用尖括号括起来，
就像这样: 
<code class="example"></code>
<code class="example">        :au BufRead *.html,&lt;&amp;faf;HTML&gt;  runtime! syntax/html.vim</code>
<code class="example"></code>
这会匹配:

- 任何名字以 ".html" 结尾的文件
- 任何类型为 "&amp;faf" 或者 "HTML" 的文件，这些类型的具体含义取决于你使用的 Vim
  的版本。
  未知的类型被认为是 <code class="emphasis">不</code> 匹配。

你可以同时自动指定类型和模式 (这时两者必须都匹配): 
<code class="example"></code>
<code class="example">        :au BufRead &lt;&amp;fff&gt;diff*</code>
<code class="example"></code>
这个例子会匹配类型为 "&amp;fff" 而且文件名以 "diff" 开始的文件。


                                                        <b class="vimtag"> <a name="plugin-details">plugin-details</a> </b>
"plugin" 目录可以在 <a href="options.html#'runtimepath'">'runtimepath'</a> 选项里的任何一个目录里。所有这些目录都会被搜
索，查找到的插件会被全部调入。例如，如果命令: 
<code class="example"></code>
<code class="example">        set runtimepath</code>
<code class="example"></code>
产生这样的输出:

<code class="section">        runtimepath=/etc/vim,~/.vim,/usr/local/share/vim/vim82 </code>

那么 Vim 会调入以下目录及其下的所有插件:

<code class="section">        /etc/vim/plugin/ </code>
<code class="section">        ~/.vim/plugin/ </code>
<code class="section">        /usr/local/share/vim/vim82/plugin/ </code>

<code class="note">注意</code> 最后一项是 $VIMRUNTIME 被扩展的值。

<code class="note">备注</code> 使用插件管理器或  <a href="repeat.html#packages">packages</a>  时，会在 <a href="options.html#'runtimepath'">'runtimepath'</a> 中加入很多目录。这些插
件每个需要自己的目录，请不要把它们直接加进 ~/.vim/plugin。

有没有可能你的插件好像没有被调入呢？通过  <a href="starting.html#-V">-V</a>  参数，你可以看看 Vim 启动的时候
发生了什么: 
<code class="example"></code>
<code class="example">        vim -V2</code>
<code class="example"></code>
你会看到很多信息。其中有关于调入插件的一行注释。它这样开始:

<code class="section">        Searching for "plugin/**/*.vim" in </code>

这样，你就能看到 Vim 在哪里查找你的插件脚本了。

</section><hr class="doubleline" /><section class=inner>
<h4>2. 文件类型插件                                         <b class="vimtag"> <a name="filetype-plugins">filetype-plugins</a> </b></h4>
如果允许载入文件类型插件  <a href="filetype.html#:filetype-plugin-on">:filetype-plugin-on</a> ，相应的选项会被设置，映射会被定
义。它们都局部于缓冲区，不会影响其他的文件。

定义文件类型的映射可能会影响你自己定义的映射。有一些方法可以避免这一点:
1. 设置 "maplocalleader" 变量为你想映射开始的键序列。例如: 
<code class="example">        :let maplocalleader = ","</code>
   所有的映射现在都以逗号开始，而不是缺省的反斜杠。另见  <a href="map.html#%3CLocalLeader%3E">&lt;LocalLeader&gt;</a> 。

2. 定义你自己的映射。例如: 
<code class="example">        :map ,p &lt;Plug&gt;MailQuote</code>
   你需要检查下面给出的插件文件的描述，以了解它们的功能和映射到的字符串。
   你需要在插件载入之前定义自己的映射。(在编辑该类型的文件之前)。该插件就可以
   跳过缺省映射的安装了。
                                        <b class="vimtag"> <a name="no_mail_maps">no_mail_maps</a> </b> <b class="vimtag"> <a name="g:no_mail_maps">g:no_mail_maps</a> </b>
3. 屏蔽特定文件类型的映射可以通过设置一个变量进行。该变量包含文件类型的名字。
   对于 "mail" 文件类型它可能是: 
<code class="example">        :let no_mail_maps = 1</code>
                                        <b class="vimtag"> <a name="no_plugin_maps">no_plugin_maps</a> </b> <b class="vimtag"> <a name="g:no_plugin_maps">g:no_plugin_maps</a> </b>
4. 通过设置变量屏蔽所有文件类型的映射: 
<code class="example">        :let no_plugin_maps = 1</code>


                                                        <b class="vimtag"> <a name="ftplugin-overrule">ftplugin-overrule</a> </b>
如果某个全局文件类型插件不完全符合你的期待，有三个办法可以改变:

1. 增加一些设置。
   你必须在 <a href="options.html#'runtimepath'">'runtimepath'</a> 靠前的一个目录里建立一个新的文件类型插件。Unix 上，
   你可以使用这个文件: 
<code class="example">        vim ~/.vim/ftplugin/fortran.vim</code>
   你可以设置你希望有的选项和映射。<code class="note">注意</code>，全局插件会在其后进行。它可能会否决你
   做的那些设置。如果发生了，你有以下两种方法。

2. 建立一个插件的备份，并改变之。
   你需要把该备份放在 <a href="options.html#'runtimepath'">'runtimepath'</a> 靠前的位置。Unix 上，你可以这么做: 
<code class="example">        cp $VIMRUNTIME/ftplugin/fortran.vim ~/.vim/ftplugin/fortran.vim</code>
   这样你可以自由的编辑你的备份文件。因为 b:did_ftplugin 会被设置，全局的插件
   就不会载入自身。这样做的一个缺点是，如果发行的插件版本更新，你需要重新复制
   并再次进行修改。

3. 在载入全局插件以后否决一些设置。
   你需要在 <a href="options.html#'runtimepath'">'runtimepath'</a> 的尾部建立一个新的文件类型插件。Unix 上，你可以使用
   这个文件: 
<code class="example">        vim ~/.vim/after/ftplugin/fortran.vim</code>
   在这个文件里，你可以对需要的设置进行改变。

</section><hr class="doubleline" /><section class=inner>
<h4>3.  缺省文件类型插件的文档                              <b class="vimtag"> <a name="ftplugin-docs">ftplugin-docs</a> </b></h4>

AWK                                                     <b class="vimtag"> <a name="ft-awk-plugin">ft-awk-plugin</a> </b>

GNU Awk 的特定功能，如 @include，的支持，可以这样打开: 
<code class="example">        let g:awk_is_gawk = 1</code>
<code class="example"></code>
<code class="example"></code>
CHANGELOG                                               <b class="vimtag"> <a name="ft-changelog-plugin">ft-changelog-plugin</a> </b>

允许方便的输入 Changlog 文件的 Changelog 段 (entry)。有些命令，映射和变量值得
探索一下:

选项:
<a href="options.html#'comments'">'comments'</a>              置为空，以免影响排版。
<a href="options.html#'textwidth'">'textwidth'</a>             设为 78，这是标准。
<a href="options.html#'formatoptions'">'formatoptions'</a>         增加 't' 标志位，使得插入文本时能进行回绕。

命令:
NewChangelogEntry       智能地增加新的 Changelog 段 (见下)。

局部映射:
<code class="special">&lt;Leader&gt;</code>o               同样智能地开始一个新的 Changlog 段 (见下)。

全局映射:
                        <code class="note">注意</code>: 全局设置是通过先执行 ftplugin/changelog.vim 文件
                        设置的。例如在你的  <a href="starting.html#.vimrc">.vimrc</a>  里加上: 
<code class="example">                                runtime ftplugin/changelog.vim</code>

<code class="special">&lt;Leader&gt;</code>o               切换到为当前目录打开的 ChangeLog 缓冲区。如果当前目录
                        已存在该文件，在新的缓冲区打开之。然后执行上述局部
                        <code class="special">&lt;Leader&gt;</code>o 的功能。

变量:
g:changelog_timeformat  已废弃；请用 g:changelog_dateformat 代替。
g:changelog_dateformat  Changelog 段使用的日期 (和时间) 格式。该格式和
                         <a href="builtin.html#strftime()">strftime()</a>  函数使用的语法相同。
                        缺省值是 "%Y-%m-%d"，这是许多 ChangeLog 排版所使用的标
                        准格式。
g:changelog_username    用户的名字和 email 地址。缺省值从环境变量和系统文件里
                        推得。它先搜索当前用户 /etc/passwd 的注释部分。非正式
                        地，该项在第一个分隔的逗号之前的部分包含了用户的实际名
                        字。然后它再检查 $NAME 环境变量，最后运行 `whoami' 和
                        `hostname' 来构造一个 email 地址。最终形式是 
<code class="example">                                Full Name  &lt;user@host&gt;</code>

g:changelog_new_date_format
                        建立新的日期项目时所用的格式。下表描述字符串中的特殊记
                        号:
                                %%      插入单个 '%' 号
                                %d      插入上述的日期
                                %u      插入上述的用户
                                %p      插入 b:changelog_entry_prefix 的值
                                %c      完成时光标的位置
                        缺省值是 "%d  %u\n\n\t* %p%c\n\n"，它会产生如下的结果
                         (| 是光标键要到的位置，除非出现在行首。那里它就是意味
                        着一行的开始) 
<code class="example">                                |2003-01-14  Full Name  &lt;user@host&gt;</code>
<code class="example">                                |</code>
<code class="example">                                |        * prefix|</code>

g:changelog_new_entry_format
                        建立新段所用的格式。下表描述字符串里的特殊记号:
                                %p      插入 b:changelog_entry_prefix 的值
                                %c      完成时光标的位置
                        缺省值是 "\t*%c"，产生的结果如下 
<code class="example">                                |        * prefix|</code>

g:changelog_date_entry_search
                        搜索日期项所用的搜索模式。
                        g:changelog_new_date_format 所使用的特殊记号这里也可以
                        使用。
                        缺省值是 '^\s*%d\_s*%u'，它能找到匹配如下形式的行 
<code class="example">                                |2003-01-14  Full Name  &lt;user@host&gt;</code>
                        和一些类似的格式。

g:changelog_date_end_entry_search
                        搜索日期项结尾所用的搜索模式。
                        g:changelog_new_date_format 所使用的特殊记号这里也可以
                        使用。
                        缺省值是 '^\s*$'，它匹配只包含空白或全空的行。

b:changelog_name                                        <b class="vimtag"> <a name="b:changelog_name">b:changelog_name</a> </b>
                        寻找的 ChangeLog 文件名。缺省是 'ChangeLog'。

b:changelog_path
                        当前缓冲区使用的 ChangeLog 路径。缺省为空，也就是寻找
                        和当前缓冲区同一目录的名为  <a href="filetype.html#b:changelog_name">b:changelog_name</a>  的文件。
                        如果没找到，搜索当前缓冲区的父目录，如此递归直到找到文
                        件或者没有更多的父目录可供搜索。

b:changelog_entry_prefix
                        函数名，用于生成新段的前缀。该函数没有参数，而应返回包
                        含前缀的字符串。
                        可以返回空前缀。
                        缺省生成 ChangeLog 的路径名和当前缓冲区路径名两者的较
                        短者。此变量将来应该可以使用其它变量上下文，例如 g:。

Changelog 段插入时，只需要输入最少量的文本。在确定当前日期和用户后，在该文件里
会搜索以当前日期和用户开头的一段，如果找到了，则在其后添加一个新项。如果没有，
则从 Changelog 文件开始处添加新的段和项目 (item)。


FORTRAN                                                 <b class="vimtag"> <a name="ft-fortran-plugin">ft-fortran-plugin</a> </b>

选项:
<a href="options.html#'expandtab'">'expandtab'</a>     被打开，按照 Fortran 标准的要求，不应出现制表字符。用户在
                .vimrc 文件里设置 fortran_have_tabs 除外。
<a href="options.html#'textwidth'">'textwidth'</a>     按照 Fortrean 标准要求， 固定宽度源文件格式设为 72，自由格式的
                源代码设为 80。
<a href="options.html#'formatoptions'">'formatoptions'</a> 设为能断开代码和注释行，并保留长行。你可以用  <a href="change.html#gq">gq</a>  排版注释。
更多的关于 fortran_have_tabs 和检测源代码格式的方法的讨论，可见
 <a href="syntax.html#ft-fortran-syntax">ft-fortran-syntax</a> 。


FREEBASIC                                               <b class="vimtag"> <a name="ft-freebasic-plugin">ft-freebasic-plugin</a> </b>

此插件用于把四种 FreeBASIC 方言，"fb"、"qb"、"fblite" 和 "deprecated" 当作不同
的语言。

方言根据 g:freebasic_forcelang、待编辑文件中的任何 #lang 指令 或 $lang 宏命
令、最后是 g:freebase_lang 中首个找到的名字。概念上，这些全局变量对应 fbc 选项
-forcelang 和 -lang。方言没有显式指定时，用 "fb"。

例如，要设置方言缺省为 "fblite"，但允许 #lang 指令覆盖，可用: 
<code class="example"></code>
<code class="example">        let g:freebasic_lang = "fblite"</code>
<code class="example"></code>
<code class="example"></code>
GIT COMMIT                                              <b class="vimtag"> <a name="ft-gitcommit-plugin">ft-gitcommit-plugin</a> </b>

提供了一个命令 :DiffGitCached 来在预览窗口中显示当前提交的差异部分。等价于
"git diff --cached" 加上此命令后面的参数。


GPROF                                                   <b class="vimtag"> <a name="ft-gprof-plugin">ft-gprof-plugin</a> </b>

gprof 文件类型插件定义了 &lt;C-]&gt;，从 gprof flat profile 或调用关系图 (call
graph) 里的函数项目跳转到调用关系图里的函数细节。

可如此关闭此映射: 
<code class="example">        let g:no_gprof_maps = 1</code>
<code class="example"></code>
<code class="example"></code>
MAIL                                                    <b class="vimtag"> <a name="ft-mail-plugin">ft-mail-plugin</a> </b>

选项:
<a href="options.html#'modeline'">'modeline'</a>      被关闭，以防特洛伊木马。也防止含有 "Vim:" 字样的标题会引起错误
                信息。
<a href="options.html#'textwidth'">'textwidth'</a>     设为 72。这是 e-mail 推荐的格式。
<a href="options.html#'formatoptions'">'formatoptions'</a> 设为能断开文本行，并且在新行里重复注释的前导符，这样引用开头的
                "&gt;" 就可以重复了。你也可以用  <a href="change.html#gq">gq</a>  排版引用文本。

局部映射:
<code class="special">&lt;LocalLeader&gt;</code>q   或者  \\MailQuote
        引用可视模式下的选择文本，或者在普通模式下从光标位置到文件末的文本。这
        意味着 "&gt; " 会插到每行的开始。

MAN                                     <b class="vimtag"> <a name="ft-man-plugin">ft-man-plugin</a> </b> <b class="vimtag"> <a name=":Man">:Man</a> </b> <b class="vimtag"> <a name="man.vim">man.vim</a> </b>

此插件以友好方式显示手册页。详情可见用户手册中的  <a href="usr_12.html#find-manpage">find-manpage</a> 。

要在调入任何手册页之前就能使用  <a href="filetype.html#:Man">:Man</a>  命令，你需要在启动的  <a href="starting.html#vimrc">vimrc</a>  文件里先执
行以下脚本: 
<code class="example"></code>
<code class="example">        runtime ftplugin/man.vim</code>
<code class="example"></code>
选项:
<a href="options.html#'iskeyword'">'iskeyword'</a>     加入 '.' 字符，提供能在手册页名字上使用 <code class="keystroke">CTRL-]</code> 的支持。

命令:
Man <code class="special">{name}</code>      在窗口里显示 <code class="special">{name}</code> 的手册页
Man <code class="special">{number}</code> <code class="special">{name}</code>
                在第 <code class="special">{number}</code> 节里显示 <code class="special">{name}</code> 的手册页。

全局映射:
<code class="special">&lt;Leader&gt;</code>K       显示当前光标下的单词的相应手册页。
<code class="special">&lt;Plug&gt;</code>ManPreGetPage
                同上，可用于映射: 
<code class="example">                        nmap &lt;F1&gt; &lt;Plug&gt;ManPreGetPage&lt;CR&gt;</code>
<code class="example"></code>
局部映射:
<code class="keystroke">CTRL-]</code>          跳到当前光标下的单词的相应手册页。
<code class="keystroke">CTRL-T</code>          跳回前一次的手册页。
q               同  <a href="editing.html#:quit">:quit</a>  命令。

要使用垂直映射而不是水平映射: 
<code class="example">        let g:ft_man_open_mode = 'vert'</code>
要用新标签页: 
<code class="example">        let g:ft_man_open_mode = 'tab'</code>
<code class="example"></code>
要打开折叠: 
<code class="example">        let g:ft_man_folding_enable = 1</code>
如果不喜欢缺省的折叠方式，使用  <a href="autocmd.html#autocommand">autocommand</a>  加入你喜欢和折叠风格。例如: 
<code class="example">        autocmd FileType man setlocal foldmethod=indent foldenable</code>
<code class="example"></code>
如果你希望 :Man <code class="special">{number}</code> <code class="special">{name}</code> 像 man <code class="special">{number}</code> <code class="special">{name}</code> 那样，如果找不到页面就
不运行 man <code class="special">{name}</code>，可以这样用: 
<code class="example">        let g:ft_man_no_sect_fallback = 1</code>
<code class="example"></code>
你可能还想设置 <a href="options.html#'keywordprg'">'keywordprg'</a>，使  <a href="various.html#K">K</a>  命令在 Vim 窗口打开手册页: 
<code class="example">        set keywordprg=:Man</code>
<code class="example"></code>
<code class="example"></code>
MANPAGER                                      <b class="vimtag"> <a name="manpager.vim">manpager.vim</a> </b>

 <a href="filetype.html#:Man">:Man</a>  命令把 Vim 变成手册浏览器 (语法高亮手册页，按 <code class="keystroke">CTRL-]</code> 时点击相连的手册
页)。

对 bash、zsh、ksh 或 dash，加入对应的配置文件 (.bashrc、.zshrc、...)

        export MANPAGER="vim +MANPAGER --not-a-term -"

对 (t)csh，加入配置文件

        setenv MANPAGER "vim +MANPAGER --not-a-term -"

对 fish，加入配置文件

        set -x MANPAGER "vim +MANPAGER --not-a-term -"


MARKDOWN                                                <b class="vimtag"> <a name="ft-markdown-plugin">ft-markdown-plugin</a> </b>

要打开折叠，可用: 
<code class="example">        let g:markdown_folding = 1</code>


PDF                                                     <b class="vimtag"> <a name="ft-pdf-plugin">ft-pdf-plugin</a> </b>

提供两个映射，&lt;C-]&gt; 和 <code class="special">&lt;C-T&gt;</code>，来模拟用于 PDF 浏览的标签栈。以下内容视为标签:

- "startxref" 后指向 xref 表的字节位移
- 文件尾部中 /Prev 键后指向以前 xref 表的字节位移
- xref 表中形如 "0123456789 00000 n" 的行
- PDF 任意位置上形如 "1 0 R" 的对象引用

可以关闭这些映射 
<code class="example">        :let g:no_pdf_maps = 1</code>


PYTHON                                          <b class="vimtag"> <a name="ft-python-plugin">ft-python-plugin</a> </b> <b class="vimtag"> <a name="PEP8">PEP8</a> </b>

缺省设置以下选项，根据 PEPB: 
<code class="example"></code>
<code class="example">        setlocal expandtab shiftwidth=4 softtabstop=4 tabstop=8</code>
<code class="example"></code>
要关闭此行为，在 vimrc 里设置变量: 
<code class="example"></code>
<code class="example">        let g:python_recommended_style = 0</code>
<code class="example"></code>
<code class="example"></code>
QF QUICKFIX                                         <b class="vimtag"> <a name="qf.vim">qf.vim</a> </b> <b class="vimtag"> <a name="ft-qf-plugin">ft-qf-plugin</a> </b>

"qf" 文件类型用于快速修复窗口，见  <a href="quickfix.html#quickfix-window">quickfix-window</a> 。

快速修复文件类型插件包括在  <a href="windows.html#status-line">status-line</a>  中显示生成快速修复列表命令的配置。要
关闭此设置，可以这样配置: 
<code class="example">        :let g:qf_disable_statusline = 1</code>
<code class="example"></code>
<code class="example"></code>
R MARKDOWN                                              <b class="vimtag"> <a name="ft-rmd-plugin">ft-rmd-plugin</a> </b>

缺省不执行 ftplugin/html.vim。要执行之，在  <a href="starting.html#vimrc">vimrc</a>  中加入: 
<code class="example">        let rmd_include_html = 1</code>
<code class="example"></code>
动态地设置 R 代码和 markdown 代码不同的 <a href="options.html#'formatexpr'">'formatexpr'</a> 值。如果你宁可
<a href="options.html#'formatexpr'">'formatexpr'</a> 不置位，在  <a href="starting.html#vimrc">vimrc</a>  中加入: 
<code class="example">        let rmd_dynamic_comments = 0</code>
<code class="example"></code>
<code class="example"></code>
R RESTRUCTURED TEXT                                     <b class="vimtag"> <a name="ft-rrst-plugin">ft-rrst-plugin</a> </b>

动态地设置 R 代码和 ReStructured 代码不同的 <a href="options.html#'formatexpr'">'formatexpr'</a> 值。如果你宁可
<a href="options.html#'formatexpr'">'formatexpr'</a> 不置位，在  <a href="starting.html#vimrc">vimrc</a>  中加入: 
<code class="example">        let rrst_dynamic_comments = 0</code>
<code class="example"></code>
<code class="example"></code>
RESTRUCTUREDTEXT                                        <b class="vimtag"> <a name="ft-rst-plugin">ft-rst-plugin</a> </b>

以下排版设置可选: 
<code class="example">        setlocal expandtab shiftwidth=3 softtabstop=3 tabstop=8</code>
<code class="example"></code>
要打开此排版，在 vimrc 中设置以下变量: 
<code class="example">        let g:rst_style = 1</code>
<code class="example"></code>
<code class="example"></code>
RPM SPEC                                                <b class="vimtag"> <a name="ft-spec-plugin">ft-spec-plugin</a> </b>

因为这个插件的文本相当长，它被单独列出:  <a href="pi_spec.html#pi_spec.txt">pi_spec.txt</a> 。


RUST                                                    <b class="vimtag"> <a name="ft-rust">ft-rust</a> </b>

因为这个插件的文本相当长，它被单独列出:  <a href="ft_rust.html#ft_rust.txt">ft_rust.txt</a> 。


SQL                                                     <b class="vimtag"> <a name="ft-sql">ft-sql</a> </b>

因为这个插件的文本相当长，它被单独列出:  <a href="ft_sql.html#ft_sql.txt">ft_sql.txt</a> 。


TEX                                             <b class="vimtag"> <a name="ft-tex-plugin">ft-tex-plugin</a> </b> <b class="vimtag"> <a name="g:tex_flavor">g:tex_flavor</a> </b>

如果 *.tex 文件的首行是如下的形式 
<code class="example">        %&amp;&lt;format&gt;</code>
那么它决定了文件类型:  plaintex (普通的 TeX)、context (ConTeXt)、或者 tex
(LaTeX)。否则在文件里搜索关键字以判断是 context 还是 tex。如果找不到关键字，缺
省是 plaintex。可以通过定义变量 g:tex_flavor 改变缺省值为最常用的格式 (不是文
件类型)。使用下列选择之一: 
<code class="example">        let g:tex_flavor = "plain"</code>
<code class="example">        let g:tex_flavor = "context"</code>
<code class="example">        let g:tex_flavor = "latex"</code>
目前还不能识别其它格式。


VIM                                                     <b class="vimtag"> <a name="ft-vim-plugin">ft-vim-plugin</a> </b>

Vim 文件类型插件定义 [[ 和 ]] 用来移动到函数开头和结尾处的映射。用 ]" 和 [" 在
注释间移动。

可以这样关闭这些映射: 
<code class="example">        let g:no_vim_maps = 1</code>
<code class="example"></code>
<code class="example"></code>
ZIMBU                                                   <b class="vimtag"> <a name="ft-zimbu-plugin">ft-zimbu-plugin</a> </b>

Zimbu 文件类型插件定义 [[ 和 ]] 用来移动到函数开头和结尾处的映射。

可以这样关闭这些映射: 
<code class="example">        let g:no_zimbu_maps = 1</code>



 vim:tw=78:ts=8:noet:ft=help:norl:
</section>
</article>
<footer>
Generated by vim2html
</footer>
</body>
</html>
